#ifndef _PMM_H_
#define _PMM_H_

#include "types.h"
#include "spinlock.h"

// 物理内存管理器的核心数据结构
struct run {
    struct run *next;
};

// 物理内存管理器全局状态结构
struct pmm_info {
    spinlock_t lock;
    struct run *freelist;
    uint64 total_pages;
    uint64 free_pages;
    uint8 *page_allocated;
};

// 声明全局变量（在pmm.c中定义）
extern struct pmm_info pmm;

// 初始化物理内存管理器
void pmm_init(void);

// 释放指定范围内的内存到空闲链表
void freerange(void *vstart, void *vend);

// 分配单个物理页
void* alloc_page(void);

// 释放单个物理页
void free_page(void *page);

// 分配连续的多个物理页（可选功能）
void* alloc_pages(int n);

// 打印物理内存统计信息
void pmm_stats(void);

#endif // _PMM_H_